#字符串操作
#字符串的驻留机制
a1='aaa'
a2="aaa"
a3='''aaa'''
print(id(a1))
print(id(a2))       #同样的字符串  只会分配地址  不重新创了
print(id(a3))

 #字符串的查找
s='hello,hello'
print(s.index('lo'))
print(s.find('lo'))        #查找一般用find吧 ，不会抛出异常       查找子串第一次出现的位置
print(s.rindex('lo'))
print(s.rfind('lo'))       #查找子串最后一次出现的位置        rfind如果不存在则返回-1

#自出穿大小写转换
print('-------------------------------')
s1='ZLsqnznb bwuhu qifei！！'
s2=s1.upper()  #  转成大写  产生新的字符串对象
print(s1,s2,id(s1),id(s2))
s3=s1.lower()   #  转换小写  产生新的字符串对象
print(s1,s3,id(s1),id(s3))
s4=s1.title()
print(s4)         #每个单词的首字母大写，其余的小写
s5=s1.swapcase()  #大写转换成小写  小写转换成大写
s6=s1.capitalize()  #把第一个字符转换为大写，其余字符转换为小写
print(s5,s6)

#字符串内容对齐
h='I am wuhuqifei'
print(h.center(20,'*'))     #居中对其，第一个参数指定宽度，第二个参数指定填充符号
print(h.ljust(20,'/'))      #左对其，第一个参数指定宽度，第二个参数指定填充符号
print(h.rjust(20,'%'))      #右对其，第一个参数指定宽度，第二个参数指定填充符号
print(h.zfill(20))          #右对其，左边用0填充，只有一个参数，用于指定字符串的宽度

#字符串的劈分
c='pi fe|nee ad|mm'
print(c.split())   # 左 劈分默认是根据空格劈分
print(c.split(sep='|'))    #用参数sep来指定劈分的符号
print(c.split(maxsplit=1))      #用  maxsplit参数来设置最大劈分次数
print(c.rsplit(sep='|',maxsplit=1))   #右劈分

#判断字符串的操作
#isidentifier()判断指定的字符串是不是合法的字符串
#isspace（）判断指定的字符串是否全部由空白字符组成（回车换行水平制表符）
#isalpha() 判断指定的字符串是否全部由字母组成
#isdecimal() 怕门店指定的字符串是否全部由十进制的数字组成
#isnumeric()判断指定的字符串是否全部由数字组成
#isalnum()判断指定的字符串是否全部由数字和字母组成
print('hehe''lalla''123'.isnumeric())

#字符串操作的其他方法 替换和合并
x='hello nange nange nange'
print(x.replace('nange','jingjing',2))   #2为最大替换次数  用replace方法替换
print(x)
list=['wuhu','qifei','nange','zuishuai']
print('@'.join(list))  #用join方法连接列表  也可以连接元祖
print('@'.join(x))   #连接字符串的结果

#字符串的比较操作
#可以用比较运算符 > < >= <= == !=
print('apple'>'app','text1')
print('apple'>'banana','text2')   #比较的是a和b的原始值
print(ord('a'),ord('b'))    #获取原始值
print(chr(97),chr(98))     #通过原始值  用chr（）输出对应字符          is 比较的是id是否相等

#字符串的切片操作
x1=x[:8]
x2=x[8:]
print(x[1:9:2],'text1')   #切到索引为1之前  切片【start：end：step】 步长指的是两个元素之间的间隔
print(x[1:])   #从索引为1开始切
print(x[8:10])  #切第八个后面到第十个
print(x[::2])  #默认从0开始，没有写结束，默认到字符串的最后一个元素，步长为2，两个元素之间的索引间隔为2
print(s[::-1]) #默认从字符串的最后一个元素开始  到第一个元素结束  因为步长为负数
print(s[-6::1]) #从索引-6开始到最后 步长为1


#格式化字符串
#(1)
name='张三'
age='20'
print('我叫%s，今年%d岁',(name,age))
#(2) {}
print('我叫{0}，今年{1}岁，{1}岁哦'.format(name,age))
#（3）f-string
print(f'我叫{name},今年{age}岁')

print('%10d' % 99)  #10表示宽度
print('%.3f' % 3.141592653)   #.3表示精度
print('{0:.3}'.format(3.1415926))   #.3 表示一共有3位
print('{0:10.3f}'.format(3.1415926))   #.3 表示3位小数  宽度是10

#字符串的编码转换
#为什么需要字符串编码转换  计算机间byte字节传输
# 编码和解码的方式  编码：将字符串转换为二进制数据   解码：将byte类型的数据转换成字符串类型
y='路漫漫其修远兮'
print(y.encode(encoding='GBK'))     #在GBK这种编码格式是中  一个中文占两个字节
print(y.encode(encoding='UTF-8'))   #在utf-8这种编码格式是中  一个中文占三个字节
byte=y.encode(encoding='UTF-8')
print(byte.decode(encoding='utf-8'))  #解码  注意解码格式相同














